"""
在柠檬水摊上，每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品，（按账单 bills 支付的顺序）一次购买一杯。

每位顾客只买一杯柠檬水，然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零，也就是说净交易是每位顾客向你支付 5 美元。

注意，一开始你手头没有任何零钱。

给你一个整数数组 bills ，其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零，返回 true ，否则返回 false 。
"""


def lemonadeChange(bills: list[int]) -> bool:
    # 定义一个统计五美元和十美元的个数的字典，方便找零
    dollar = {5: 0, 10: 0}

    # 如果第一个用户不是五美元，就没法找零，直接pass
    if bills[0] != 5:
        return False

    for i in bills:
        # 判断是否在字典中，统计其个数
        if i in dollar.keys():
            dollar[i] += 1

        # 判断能否给十元的找零
        if i == 10:
            if not dollar[5]:
                return False
            dollar[5] -= 1
        # 判断能否给二十元的找零， 有俩种找零的情况
        elif i == 20:
            # 是否有十元 + 五元
            if dollar[10] and dollar[5]:
                dollar[10] -= 1
                dollar[5] -= 1
            # 是否有3个五元
            elif dollar[5] >= 3:
                dollar[5] = dollar[5] - 3
            # 其余是false
            else:
                return False

    # 成功遍历就是找零完成
    return True


bills = [5, 5, 5, 5, 20, 20, 5, 5, 5, 5]
print(lemonadeChange(bills))

# def lemonadeChange( bills: list[int]) -> bool:
#     money = []
#     count = 0
#     for i in bills:
#         if i == 5:
#             money.append(i)
#         elif i == 10:
#             if 5 in money:
#                 money.remove(5)
#                 money.append(i)
#             else:
#                 return False
#         else:
#             if 10 in money and 5 in money:
#                 money.remove(5)
#                 money.remove(10)
#                 money.append(i)
#             elif 5 in money:
#                 if len(money) - count >= 3:
#                     for j in range(3):
#                         money.remove(5)
#                     money.append(i)
#                 else:
#                     return False
#             else:
#                 return False
#             count += 1
#     return True
#
#
#
#
#
#
#
# bills = [5,5,5,5,20,20,5,5,20,5]
# print(lemonadeChange(bills))
